package com.jn.erp.wechat.mp.task;


import com.jn.erp.utils.RedisLock;
import com.jn.erp.wechat.core.WxMessageData;
import com.jn.erp.wechat.mp.config.TmplmsgConfig;
import com.jn.erp.wechat.mp.entity.dto.MpClassInfoDto;
import com.jn.erp.wechat.mp.handler.MpMessageHandler;
import com.jn.erp.wechat.mp.mapper.MpTaskDataMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 周期性发送下一天要上课程
 */
@Service
@Slf4j
@Transactional(rollbackFor = Exception.class)
public class StudentCourseNoticeTask {

    @Autowired
    private RedisLock redisLock;
    //
    @Autowired
    private MpTaskDataMapper taskDataMapper;

    @Autowired
    private MpMessageHandler mpMessageHandler;

    @Autowired
    private TmplmsgConfig tmplmsgConfig;

    //每天下午5:00运行
    //    @Scheduled(cron = "0 0/1 * * * ?")
    @Scheduled(cron = "0 0 17 * * ?")
    public void checkClassInfo() {
        Boolean idxScoreReportsTask = redisLock.lock("MpStudentCourseNoticeTask:checkClassInfo");
        if (!idxScoreReportsTask) {
            System.out.println("未完成redisLock是关的");
            return;
        }
        try {
            List<MpClassInfoDto> mpClassInfoDtos = taskDataMapper.scanClassInfoNextDay();
            System.out.println(mpClassInfoDtos);
            for (int i = 0; i < mpClassInfoDtos.size(); i++) {
                MpClassInfoDto classInfoDto = mpClassInfoDtos.get(i);
                WxMessageData messageData = new WxMessageData();
                messageData.setOpenId(classInfoDto.getMpid());
                //课程名称
                messageData.setCourseName(classInfoDto.getCourseName());
                //上课地点
                messageData.setOrgName(classInfoDto.getOrgName());
                //上课时间
                messageData.setClassDate(classInfoDto.getClassDateShow()+ " " + classInfoDto.getClassStartTime());
                //班级名称
                messageData.setClassName(classInfoDto.getClassName());
                mpMessageHandler.ClassRegistrationMessageUser(messageData, tmplmsgConfig.getClassNotice());
            }
        } catch (Exception e) {
            log.info(e.getMessage());
            e.printStackTrace();
        } finally {
            redisLock.del("MpStudentCourseNoticeTask:checkClassInfo");
        }
    }
}
